#ifndef __PID_H__
#define __PID_H__




/* PID参数结构体 */
typedef struct
{
    float  TargetVal;           /* 设定目标，用于偏差计算 */
    float  ActualVal;           /* 当前值 */
    float  OutputVal;           /* 期望输出值 */
    float  MaxOutputVal;        /* 最大输出值*/
    float  Integral;            /* 误差累计 */
    float  Kp,Ki,Kd;            /* 比例常数 P 积分常数 I 微分常数 D*/
    float  Error;               /* Error[1] */
    float  LastError;           /* Error[-1] */
    float  PrevError;           /* Error[-2] */
} PID_t;

void PID_param_init(void);

float PositionPID_Realize(PID_t *pid, float ActualVal); // 位置式PID
float IncrementPID_Realize(PID_t *pid, float ActualVal); // 增量式PID


void set_PID_P_I_D(PID_t *pid,float Kp, float Ki, float Kd);    // 设置kp ki kd
void set_PID_TargetVal(PID_t *pid,float TargetVal);             // 设置目标值
void set_PID_MaxOutputVal(PID_t *pid,float MaxOutputVal);       // 设置增量PID最大输出值


#endif
